Caching is used to improve performance in a wide variety of computer systems. Caching allows data to be replicated close to a client. This helps the client avoid having to fetch the object from a remote node, persistent storage, or the like, for which the overhead to access the data would be high. However, with respect to multiple processes executing in the same node trying to access the same data, existing caches are generally inefficient. One existing solution is for each process to have its own cache. Therefore, n caches are required for n processes, one for each process potentially resulting in n copies of a cached object. This space overhead is a significant drawback. Another problem is that with multiple copies, consistency among the multiple copies needs to be maintained. This adds further complications and overhead. Another existing solution is to have a cache process C1 communicating with P1, P2, . . . Pn. A process Pi accesses the cache by communicating with C1. However, this inter-process communication also incurs unnecessary overhead as well.